package com.scr1pt.extension

/**
 * 说明: 枚举扩展
 *
 * 创建者: tum0r
 *
 * 时间: 2021/11/8 13:09
 */

/**
 * 根据名称转换成枚举，转换失败则取该枚举类型的第一个
 *
 * @param[name] 枚举名
 */
inline fun <reified T : Enum<T>> parseEnum(name: String): T {
    val values = enumValues<T>()
    var result = values[0]
    for (v in values)
        if (v.name.equals(name, true)) {
            result = v
            break
        }
    return result
}

/**
 * 获取枚举所有值的集合列表
 *
 * @param[exceptFields] 排除的枚举值
 */
inline fun <reified T : Enum<T>> getAllEnumValue(vararg exceptFields: T): ArrayList<T> {
    val result = ArrayList<T>()
    if (exceptFields.isEmpty()) {
        for (field in T::class.java.fields)
            result.add(enumValueOf(field.name))
    } else {
        val except = HashSet<String>()
        for (field in exceptFields)
            except.add(field.name)
        for (field in T::class.java.fields)
            if (!except.contains(field.name))
                result.add(enumValueOf(field.name))
    }
    return result
}